home *** CD-ROM | disk | FTP | other *** search
- //---------------------------------------------------------------------------
- // PROGRAMA: SETUP DE SONIDO
- // AUTOR: DANIEL NAVARRO
- // FECHA: 23/03/97
- //---------------------------------------------------------------------------
-
- SETUP_PROGRAM div_sound_setup;
-
- CONST
- max_botones=18;
-
- GLOBAL
- STRUCT botones[max_botones] // Estructura general para cada botón
- x,y, // Coordenadas en pantalla
- graph, // Gráfico que utiliza al pulsarlo
- inc, // Incremento que realiza el botón
- max, // Valor máximo permitido con su incremento
- valor; // Valor actual del botón
- END=302,2,12,0,0,0, // Botón de escape
- 159,58,10,-1,0,&setup.card, // Botón + de selección de tarjeta
- 177,58,11,1,7,&setup.card, // Botón - de selección de tarjeta
- 60,98,10,-1,0,&setup.port, // Botón + de selección de puerto
- 78,98,11,1,5,&setup.port, // Botón - de selección de puerto
- 159,98,10,-1,0,&setup.irq, // Botón + de selección de irq
- 177,98,11,1,9,&setup.irq, // Botón - de selección de irq
- 60,138,10,-1,0,&setup.dma, // Botón + de selección de dma
- 78,138,11,1,10,&setup.dma, // Botón - de selección de dma
- 159,138,10,-1,0,&setup.dma2, // Botón + de selección de dma2
- 177,138,11,1,10,&setup.dma2, // Botón - de selección de dma2
- 279,58,10,-1,0,&setup.master, // Botón + de volumen maestro
- 297,58,11,1,15,&setup.master, // Botón - de volumen maestro
- 279,98,10,-1,0,&setup.sound_fx, // Botón + de volumen canal de efectos
- 297,98,11,1,15,&setup.sound_fx, // Botón - de volumen canal de efectos
- 279,138,10,-1,0,&setup.cd_audio, // Botón + de volumen CD audio
- 297,138,11,1,15,&setup.cd_audio, // Botón - de volumen CD audio
- 2,221,13,0,0,0,
- 100,221,14,0,0,0;
-
- // Textos que denominan los tipos de tarjeta de sonido
- tarjeta_sonido[]="No Sound","Sound Blaster 1.5","Sound Blaster 2.0","Sound Blaster Pro",
- "Sound Blaster 16","Sound Blaster AWE","Gravis Ultra Sound","Gravis Ultra Sound MAX";
-
- // Textos que denominan los puertos posibles
- puerto[]="0x210","0x220","0x230","0x240","0x250","0x260";
-
- // Textos que denominan las irq posibles
- irq[]="2","3","5","7","10","11","12","13","14","15";
-
- // Texto que denomiman los canales de dma posibles
- dma[]="0","1","2","3","4","5","6","7","8","9","10";
-
- id_sonido; // Identificador del sonido usado
-
- BEGIN
- // Selecciona el modo de video y la velocidad de impresión
- set_mode(m320x240);
- set_fps(100,0);
-
- fade_on(); // Enciende la pantalla
- load_fpg("setup\setup.fpg"); // Carga el fichero de gráficos
- put_screen(0,1); // Pone la pantalla de fondo
-
- FRAME; // Imprime todo
-
- dump_type=partial_dump; // Hace que no se restaure la pantalla
- restore_type=partial_restore; // para asi ganar velocidad
-
- mouse.graph=100; // Selecciona el gráfico del ratón
- sombra_ratón(101,4); // Y crea una sombra del mismo debajo
-
- // Crea todos los botones necesarios
- FROM x=0 TO max_botones;
- botón(x);
- END
-
- // Crea los tres volumenes necesarios
- volumen(1,210,60);
- volumen(2,210,100);
- volumen(3,210,140);
-
- // Muestra los valores de todos los parametros
- muestra_valores();
-
- // Repite indefinidamente
- LOOP
-
- // Si se pulsa la tecla [ESCAPE] sale del programa
- IF (key(_esc)) exit("",0); END
- FRAME;
- END
- END
-
- //---------------------------------------------------------------------------
- // Proceso sombra_ratón
- // Pone el gráfico de la sombra del ratón
- // Entradas: graph = número de grafico
- // flags = bandera de espejado y transparencia
- //---------------------------------------------------------------------------
-
- PROCESS sombra_ratón(graph,flags)
-
- BEGIN
- z=mouse.z+1; // Hace que se imprima un plano por debajo del ratón
- LOOP
- // Sus coordenadas estan más a la derecha y más abajo que el ratón
- x=mouse.x+4;
- y=mouse.y+2;
- FRAME;
- END
- END
-
- //---------------------------------------------------------------------------
- // Proceso botón
- // Maneja los todos los botones del programa
- // Entradas: número = número de botón que tiene que manejar
- //---------------------------------------------------------------------------
-
- PROCESS botón(número)
-
- PRIVATE
- ancho; // Ancho en pixels del botón
-
- BEGIN
- // Coge las coordenadas de la tabla de botones
- x=botones[número].x;
- y=botones[número].y;
- // Si el botón es de los dos últimos es más ancho
- IF (número>16) ancho=96; ELSE ancho=16; END
- // Repite indefinidamente
- LOOP
- // Comprueba si se hace click con el ratón encima del botón
- IF (mouse.x>x and mouse.x<x+ancho and
- mouse.y>y and mouse.y<y+16 and mouse.left)
- // Cambia el gráfico por el del botón pulsado
- graph=botones[número].graph;
- ELSE
- // Si la última vez se pulso el botón
- IF (graph<>0)
- // Quita el gráfico del botón pulsado
- graph=0;
- FRAME;
- // Comprueba que botón es el pulsado
- switch(número)
- // Sale del programa
- case 0:
- exit("",0);
- END
- // Graba la configuración y sale del programa
- case 17:
- save("sound.cfg",&setup,sizeof(setup));
- exit("",0);
- END
- // Hace un test de sonido
- case 18:
- unload_pcm(id_sonido); // Descarga el sonido si lo hubiera
- reset_sound(); // Actualiza los valores de configuración
- // Carga el sonido de prueba
- id_sonido=load_pcm("setup\setup.pcm",0);
- // Si no esta tocando una canción el CD
- IF (not is_playing_cd())
- // Hace que suene el CD
- play_cd(2,0);
- END
- // Ejecuta el sonido
- sound(id_sonido,256,256);
- END
- // Para los demás botones
- default:
- // Si el incremento a realizar es positivo
- IF (botones[número].inc>0)
- // Y si no se sobrepasa el limite
- IF ([botones[número].valor]<botones[número].max)
- // Realiza el incremento
- [botones[número].valor]+=botones[número].inc;
- END
- ELSE // Si no, es negativo
- // Y si tampoco se sobrepasa el limite
- IF ([botones[número].valor]>botones[número].max)
- // Realiza el decremento
- [botones[número].valor]+=botones[número].inc;
- END
- END
- END
- END
- // Muestra los valores actualizados
- muestra_valores();
- END
- END
- FRAME;
- END
- END
-
- //---------------------------------------------------------------------------
- // Proceso muestra_valores
- // Muestra los valores actualizados
- //---------------------------------------------------------------------------
-
- PROCESS muestra_valores()
-
- BEGIN
- // Borra cualquier texto que hubiera impreso
- delete_text(all_text);
- // Escribe los nuevos textos actualizados
- write(0,12,61,0,tarjeta_sonido[setup.card]);
- write(0,12,101,0,puerto[setup.port]);
- write(0,111,101,0,irq[setup.irq]);
- write(0,12,141,0,dma[setup.dma]);
- write(0,111,141,0,dma[setup.dma2]);
- // Define tres regiones para los tres volumenes configurables
- // con un tamaño proporcional a sus valores
- define_region(1,210,60,4+(4*setup.master),11);
- define_region(2,210,100,4+(4*setup.sound_fx),11);
- define_region(3,210,140,4+(4*setup.cd_audio),11);
- END
-
- //---------------------------------------------------------------------------
- // Proceso volumen
- // Maneja los gráficos de los volumenes
- // Entradas: region = Número de región del volumén
- // x,y = Coordenadas en pantalla
- //---------------------------------------------------------------------------
-
- PROCESS volumen(region,x,y)
-
- BEGIN
- // Selecciona el gráfico
- graph=50;
- // Repite indefinidamente
- LOOP
- FRAME;
- END
- END
-